#ifndef CHATLIB_H
#define CHATLIB_H

/* Networking. 网络相关功能 */
/**
 * @brief 创建一个 TCP 服务器套接字并监听指定端口
 * @param port 服务器要监听的端口号
 * @return 成功时返回监听套接字描述符，失败时返回 -1
 */
int createTCPServer(int port);
/**
 * @brief 将指定的套接字设置为非阻塞模式并禁用 Nagle 算法
 * @param fd 要设置的套接字描述符
 * @return 成功时返回 0，失败时返回 -1
 */
int socketSetNonBlockNoDelay(int fd);
/**
 * @brief 接受一个来自客户端的连接请求
 * @param server_socket 服务器监听套接字描述符
 * @return 成功时返回新连接的客户端套接字描述符，失败时返回 -1
 */
int acceptClient(int server_socket);
/**
 * @brief 尝试连接到指定地址和端口的 TCP 服务器
 * @param addr 服务器的地址
 * @param port 服务器的端口号
 * @param nonblock 是否将套接字设置为非阻塞模式，非零值表示设置为非阻塞，0 表示阻塞模式
 * @return 成功时返回连接的套接字描述符，失败时返回 -1
 */
int TCPConnect(char *addr, int port, int nonblock);

/* Allocation. 内存分配相关功能 */
/**
 * @brief 分配指定大小的内存块
 * @param size 要分配的内存大小（字节）
 * @return 成功时返回分配的内存块指针，失败时返回 NULL
 */
void *chatMalloc(size_t size);
/**
 * @brief 重新分配指定指针指向的内存块大小
 * @param ptr 指向要重新分配的内存块的指针，如果为 NULL，则等同于 chatMalloc
 * @param size 新的内存块大小（字节）
 * @return 成功时返回重新分配的内存块指针，失败时返回 NULL
 */
void *chatRealloc(void *ptr, size_t size);


#endif // CHATLIB_H
